The present invention relates to the field of computer graphics, and in particular to methods and apparatus for animating computer generated characters. The present invention relates to the field of computer graphics. Many computer graphic images are created by mathematically modeling the interaction of light with a three dimensional scene from a given viewpoint. This process, called rendering, generates a two-dimensional image of the scene from the given viewpoint, and is analogous to taking a photograph of a real-world scene. Animated sequences can be created by rendering a sequence of images of a scene as the scene is gradually changed over time. A great deal of effort has been devoted to making realistic looking rendered images and animations.
One important aspect in creating realistic looking rendered images is the creation of attributes for the surfaces and optionally the interiors of objects. Optical attributes can include color; transparency; reflective and refractive properties (such as diffuse and specular reflective coefficients; and geometric properties (such as surface normal and displacement vectors). Attributes often vary in complex ways over the surface or space defined by an object. To model these changes, one or more data sets defining all or a portion of an object's attributes are defined and mapped onto the surfaces and/or volume of an object. Data sets may have one, two, three, or more dimensions. For example, a texture map is a data set defining the color of the surfaces and/or volume of an object. Texture maps can be used to give objects the appearance of different materials. For example, a wood texture or a marble texture can be applied to an object to give it the appearance of being made of wood or marble, respectively.
Attribute data sets can be generated in a number of ways. An artist can manually create data sets such as texture maps by drawing an image of the desired data set. Other software tools can be used to manually define other types of attribute data sets, such as surface normal or displacement vectors. Additionally, data sets can be generated procedurally. Typically, procedural data sets are created by applying one or more algorithms to one or more input data sets. In some applications, only the algorithms and input data sets for a procedural data set are defined in advance of rendering. During rendering, the procedural data is produced as needed for only the portions of objects being rendered. Procedural data sets can be used to approximate the attributes of a variety of different materials, such as wood, stone, glass, smoke, fire, and fur.
One type of input data often used by procedural data sets is noise. Noise is a set of random, pseudorandom, or other type of data without any discernable pattern. Data having a discernable pattern may also have a noise component, which is the portion of the data without a discernable pattern. Noise is used by procedural data sets to introduce natural variations in the attributes of an object and to ensure that no unnatural repeating patterns occur. One common type of noise used by procedural data sets is Perlin noise. Perlin noise creates a noise set by combining two or more octaves of random or pseudorandomly generated data. An octave is a set of data having a frequency spectrum contained between two frequencies that have a two to one ratio. By combining octaves of data, Perlin noise attempts to bandlimit the resulting noise to a desired frequency spectrum.
Aliasing due to undersampling high frequency data is one problem that arises during rendering. Rendering is analogous to sampling the data of a scene, with each pixel or sub-pixel representing a sample. The distance between pixels determines the maximum spatial bandwidth for a given rendering resolution. If the scene contains data, including attribute data sets, having high frequency components exceeding the maximum spatial bandwidth of the renderer, aliasing can occur.
One problem with Perlin noise is that it is poorly bandlimited. Although Perlin noise is created from separate noise octaves, each octave often includes frequency components outside the desired range of frequencies of the octave. As a result, rendering procedural data sets created from Perlin noise can result in portions that have aliasing artifacts due to undersampling of excess high frequency components or blurring due to excess low frequency components. For scenes with surfaces sampled at a variety of different frequency ranges, for example a ground surface extending from the foreground to the horizon, the user must often choose between including additional octaves and introducing aliasing as a result, or excluding these additional octaves and introducing blurring or loss of detail.
In one application of noise functions, noise functions are used as input data for creating procedural data sets. For example, a three-dimensional set of noise data is used to create a procedural texture map for a three-dimensional volume, such as a cloud. In many applications, such as applying a texture map to the surface of a three-dimensional object, the set of noise data is sliced or divided into a lower dimensional set of noise data. Unfortunately, it has been observed that a lower-dimensional slice of noise data extracted from a higher dimensional set of bandlimited noise data is not bandlimited.
It is therefore desirable for a system and method to create bandlimited noise data for procedural data sets and other purposes. It is also desirable to efficiently create bandlimited noise slices with an arbitrary number of dimensions from bandlimited noise data with a higher number of dimensions.